package top.limitblog.dao;

import java.io.Serializable;
import java.util.List;

/**
 * Created by liuyu on 15/10/2016.
 */
public interface GenericDao<T, PK extends Serializable> {
    /**
     * 延时加载对象
     *
     * @param id
     * @return
     */
    T load(PK id);

    /**
     * 保存
     *
     * @param obj
     * @return
     */
    PK save(T obj);

    /**
     * 查询
     *
     * @param id
     * @return
     */
    T get(PK id);

    /**
     * 查询
     * @param hql
     * @param param
     * @return
     */
    T get(String hql, Object[] param);
    /**
     * 查询集合
     *
     * @return
     */
    List<T> findAll();

    /**
     * 查询集合
     *
     * @param hql
     * @param param
     * @return
     */
    List<T> find(String hql, Object[] param);

    /**
     * 删除
     *
     * @param id
     */
    void delete(PK id);

    /**
     * 保存或更新
     *
     * @param obj
     */
    void saveOrUpdate(T obj);

    /**
     * 清空
     */
    void flush();
}
